package cn.wolfcode.mobitor;


import cn.wolfcode.luowowo.domain.Strategy;
import cn.wolfcode.luowowo.redis.StrategyStatisVO;
import cn.wolfcode.luowowo.redis.srevice.IStrategyRedisSrevice;
import cn.wolfcode.luowowo.service.IStrategyService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 服务器启动的监视器
 * 这个是监视服务器启动的监视器,在服务器启动后调用里面的服务进行初始化等操作
 */
@Component
public class SpringBootMonitor  implements ApplicationListener<ContextRefreshedEvent> {
    //注入StrategyRedis与strategy的对象
    @Autowired
    private IStrategyRedisSrevice strategyRedisSrevice;
    @Autowired
    private IStrategyService strategyService;
    
    //实现其中的初始化方法  onApplicationEvent开启服务器事件
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        //每次启动服务器就会进行操作下面的方法
        System.out.println("=========================重启程序!!!!!!!!!!!!!!!");
        //先获取所以的攻略
        List<Strategy> list = strategyService.list();
        //遍历后将值付给redis里面的vo对象
        for (Strategy strategy : list) {
            /*每次启动服务器包括重启服务器,但是redis没有进行持久化的情况下, 就会造成数据重新初始化,之前进行操作的数据全部会被重置
            * 所以需要判断, 接下来需要循环的key是否存在于redis中,存在就跳过这次循环
            * */
            if (strategyRedisSrevice.isStrategyKey(strategy.getId())){
                continue;
            }
            
            //初始化一个vo对象
            StrategyStatisVO vo = new StrategyStatisVO();
            //将获取的攻略对象里面的vo对应的值copy给vo对象
            BeanUtils.copyProperties(strategy,vo);
            //别忘了还有一个id不是匹配的
            vo.setStrategyId(strategy.getId());
            //将vo对象存进redis中
            strategyRedisSrevice.setStrategyStatis(vo);
        }
    }
}
